package de.koller.worlders.engine.tiles.data;

import de.koller.worlders.WSea;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MapDataDist extends WSea {
	
	private final Map<String, MapData> maps = new HashMap<>();
	
	public void reloadData() {
		saveMaps();
		maps.clear();
		//mapData = new MapData( wroot.getUser().getMapName(), map.wroot );
	}
	
	public void saveMaps() {
		for( MapData m : maps.values() )
			m.save();
	}

	public MapData getMapData( int tx, int ty ) {
		String key = getMapKey( tx, ty );
		MapData md = maps.get( getMapKey( tx, ty ) );
		if( md != null )
			return md;
		
		md = new MapData( mappedValue( tx ), mappedValue( ty ), key, 
				wroot.getUser().getMapName(), wroot );
		maps.put( key, md );
		return md;
	}
	
	private String getMapKey( int tx, int ty ) {
		int mx = mappedValue( tx );
		int my = mappedValue( ty );
		
		if( mx == 0 && my == 0 )
			return "";
		else
			return TileKey.toKey( mx, my );
	}
	
	private int mappedValue( int t ) {
		return (int)( Math.floor( (double)t / (double)MapData.MAP_SIZE ) * MapData.MAP_SIZE );
	}
	
	public int getLoadedMaps() {
		return maps.size();
	}
	
	public void releaseMap( MapData md ) {
		md.save();
		maps.remove( md.getKey() );
	}
	
	public Integer[] loadedTiles() {
		List<Integer> d = new ArrayList<>();
		for( MapData m : maps.values() )
			d.add( m.loadedTileNumber() );
		return d.toArray( new Integer[0] );
	}
}
